<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>对象简介、基本操作</title>
    <script>
        /* 对象 */
        /* 
        JS中的数据类型
            String  字符串
            Number  数值
            Boolean 布尔值
            Null    空值
            undefined   未定义
                以上为基本数据类型，只要不是上面的物种类型，其余的都是对象
            Object  对象


        基本数据类型都是单一的值，值和值之间没有任何联系


        在JS中来表示一个人的信息（name gender age）
        var name = Syan;
        var age = 18;
        var gender = male;
        如果使用一个基本数据类型的数据，所创建的变量都是独立的，不能成为一个整体

        对象属于一种复合的数据类型，在对象中可以保存多个不同的数据类型的属性

        对象的分类：
            1.内建对象
                由ES标准中定义的对象，在任何的ES的实现中都可以实现
                eg：Math String Number Boolean Function
            2.宿主对象
                由JS的运行环境提供的对象，目的来讲主要是指浏览器提供的对象
                比如BOM（浏览器对象模型） DOM（文档对象模型）
            3.自定义对象
                由开发人员自己创建的对象
        */

        //创建对象
        /* 
        使用new关键字调用的函数，是构造函数constructor
        构造函数是专门用来创建对象的函数

        使用typeof检查一个对象时，返回object，NaN返回的也是Object
        */
        var obj = new Object();

        /* 
        在对象中保存的值成为属性
        向对象添加属性
            语法：对象.属性名 = 属性值;
            对象的属性名不强制要求标识符的规范
            但是使用时尽量按照标识符规范

            如果使用特殊的属性名，不能使用.的方式来操作
            需要另一种方式
                语法：对象["属性名"] = 属性值
                读取时也需要这种方式

            使用[]这种形式区操作属性，更加灵活
                在[]中可以直接传递一个变量，这样变量发值是多少就会读取那个属性
        */

        //向对象中添加一个name属性
        obj.name = "Syan";
        obj.var = "hello";
        obj["123"] = 789;
        obj["nihao"] = "你好";
        var n = "123";
        var m = "niaho";
        console.log(typeof obj);
        /* 
        读取对象属性
            语法：对象.属性名

        如果读取对象中没有属性，不会报错而是返回undefined
        */
        /* 
        修改属性值
         语法：对象.属性名 = 新值

        */
        /* 
        删除对象的属性值
        语法： delete 对象.属性名
        */
        console.log(obj.name);
        console.log(obj["123"]);
        console.log(obj["nihao"]);
        console.log(obj[n]);
        console.log(obj[m]);
        /* 
        属性值
            JS对象的属性值，可以是任何数据类型
            也可以是一个对象
        */
        //创建一个对象
        var obj2 = new Object();
        obj2.name = "孙悟空";

        //将obj2设置为obj的属性
        obj.test = obj2;
        console.log(obj.test);
        console.log(obj.test.name);
        /* 
        in运算符
            通过该运算符可以检查一个对象中是否含有指定的属性
                如果有则返回true，没有则返回false
            语法：
                "属性名" in 对象
        */
        //检查obj中是否含有test2属性
        console.log("test" in obj2);
        console.log("name" in obj2);
    </script>
</head>

<body>

</body>

</html>